#include "split.h"
#include "string.h"
#include "stdlib.h"
// #include "list.h"

void split_string(const char *str, char data[][20], int *count)
{
    const char *start = str;
    const char *end;
    int i = 0;
    while (*start && i < 24)
    {
        end = strchr(start, ','); // 查找下一个逗号
        // 如果找到逗号
        if (end)
        {
            int length = end - start;        // 计算当前字段长度
            strncpy(data[i], start, length); // 复制字段
            data[i][length] = '\0';          // 添加字符串结束符
            start = end + 1;                 // 跳过逗号
        }
        else
        {
            // 处理最后一个字段，使用 * 作为分隔符
            end = strchr(start, '*'); // 查找 *
            if (end)
            {
                int length = end - start;        // 复制到 *
                strncpy(data[i], start, length); // 复制字段
                data[i][length] = '\0';          // 添加字符串结束符
                // 处理 * 后的剩余部分
                start = end + 1;             // 跳过 *
                i++;                         // 移动到下一个字段
                strncpy(data[i], start, 19); // 复制剩余部分
                data[i][19] = '\0';          // 添加字符串结束符
            }
            else
            {
                // 如果没有找到 *，复制剩余部分
                strncpy(data[i], start, 19); // 复制最后部分（限制长度）
                data[i][19] = '\0';          // 添加字符串结束符
            }
            break;
        }
        i++;
    }
    *count = i + 1; // 计数包括最后一个字段
}

void split_string_to_list(const char *str, DoublyLinkedListObjct *list_obj, int *count)
{
    const char *start = str;
    const char *end;
    void *_data = NULL;
    int i = 0;
    while (*start && i < 24)
    {
        end = strchr(start, ','); // 查找下一个逗号
        // 如果找到逗号
        if (end)
        {
            // TODO: 添加\0结尾
            int length = end - start; // 计算当前字段长度
            char *temp = (char *)malloc(length + 1);
            if (length)                       // 防止空字符串
                strncpy(temp, start, length); // 复制字段
            temp[length] = '\0';              // 添加字符串结束符
            _data = list_obj->lmalloc((void *)temp, length + 1);
            list_obj->push_back(list_obj, _data);
            free(temp);      // 释放分配的内存
            start = end + 1; // 跳过逗号
        }
        else
        {
            // 处理最后一个字段，使用 * 作为分隔符
            end = strchr(start, '*'); // 查找 *
            if (end)
            {
                int length = end - start; // 复制到 *
                char *temp = (char *)malloc(length + 1);
                if (length)                       // 防止空字符串
                    strncpy(temp, start, length); // 复制字段
                temp[length] = '\0';              // 添加字符串结束符
                _data = list_obj->lmalloc((void *)temp, length + 1);
                list_obj->push_back(list_obj, _data);
                free(temp); // 释放分配的内存
                // 处理 * 后的剩余部分
                start = end + 1; // 跳过 *
                i++;             // 移动到下一个字段
                _data = list_obj->lmalloc((void *)start, 19);
                list_obj->push_back(list_obj, _data);
            }
            else
            {
                // 如果没有找到 *，复制剩余部分
                _data = list_obj->lmalloc((void *)start, 19);
                list_obj->push_back(list_obj, _data);
            }
            break;
        }
        i++;
    }
    *count = i + 1; // 计数包括最后一个字段
}